#ifndef __ZYF_MARCOS_H_
#define __ZYF_MARCOS_H_

/**
 * Desc: 常用宏
 * Auth: 张宇飞
 * Date: 2015-04-09    
 */
#include <stdlib.h>

#ifdef __cplusplus
extern "C" {
#endif

// 异常中断
#define ZYF_RET(_p_, _ret_)		if ((_p_)) return (_ret_)
#define ZYF_VRET(_p_)			if ((_p_)) return
#define ZYF_BREAK(_p_)			if ((_p_)) break
#define ZYF_CONTINUE(_p_)		if ((_p_)) continue
#define ZYF_GOTO(_p_, _flag_)		if ((_p_)) goto _flag_
#define ZYF_UNUSED(_p_)			(void)(_p_)

// 内存管理
#define ZYF_ARR_N(_a_)			(sizeof(_a_) / sizeof(_a_[0]))
#define ZYF_ALLOCA_0(_name_, _t_) \
	_t_* _name_ = (_t_*)alloca(sizeof(_t_));\
	memset(_name_, 0, sizeof(_t_))
#define ZYF_MALLOC_0(_name_, _t_) \
	_t_* _name_ = (_t_*)malloc(sizeof(_t_));\
	memset(_name_, 0, sizeof(_t_))
#define ZYF_SAFE_FREE(_p_)		{if ((_p_)){free((_p_)); (_p_) = NULL;}}while(0)

// 标志设定
#define ZYF_FLAG_TEST(_flag_, _mask_)	((_flag_ & _mask_) == (_mask_))
#define ZYF_FLAG_ON(_flag_, _mask_)	(_flag_ | _mask_)
#define ZYF_FLAG_OFF(_flag_, _mask_)	(_flag_ & (~_mask_))
#define ZYF_FLAG_TO(_c_, _f_, _m_)	((_c_) ? ZYF_FLAG_ON(_f_, _m_) : ZYF_FLAG_OFF(_f_, _m_))

#ifdef __cplusplus
} /* end extern C */
#endif

#endif /* end of include guard: __ZYF_MARCOS_H_ */
